{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "633e2090-6b89-48a0-a725-f3fe5dded070",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sympy as sym\n",
    "import numpy as np\n",
    "import scipy as sp\n",
    "\n",
    "from pygears.transformation import symbolic_transformation, numeric_transformation\n",
    "\n",
    "t, x, m, xw = sym.symbols([\"t\", \"x\", \"m\", \"xw\"])\n",
    "s, alpha, n_t, y, phi = sym.symbols([\"s\", \"alpha\", \"n_t\", \"y\", \"phi\"])\n",
    "r = sym.Function(\"r\")(x, y)\n",
    "z = sym.Function(\"z\")(x, y, t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e2849ad6-1521-4a8b-9238-10db3978d14a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{\\left(x - xw\\right)^{2} + z^{2}{\\left(x,y,t \\right)}}$"
      ],
      "text/plain": [
       "sqrt((x - xw)**2 + z(x, y, t)**2)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dp = sym.sqrt( (x - xw)**2 + z**2)\n",
    "dp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5a954527-68c8-4d9c-9a4a-149d044dbd9e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x - xw + z{\\left(x,y,t \\right)} \\frac{\\partial}{\\partial x} z{\\left(x,y,t \\right)}}{\\sqrt{\\left(x - xw\\right)^{2} + z^{2}{\\left(x,y,t \\right)}}}$"
      ],
      "text/plain": [
       "(x - xw + z(x, y, t)*Derivative(z(x, y, t), x))/sqrt((x - xw)**2 + z(x, y, t)**2)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.simplify(sym.diff(dp, x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "967cad10-d3d6-4803-bc7f-9c4a3ea15611",
   "metadata": {},
   "outputs": [],
   "source": [
    "(x - xw + z(x,y,t) * dz_dx(x,y,t) ) / np.sqrt((x - xw)**2 + z(x,y,t)**2 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d1c2c2ea-02b0-4c20-bfc4-e07c99a07dcc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{m n_{t} \\operatorname{asin}{\\left(\\frac{y}{r{\\left(x,y \\right)}} \\right)}}{2} + t + \\left(- xw + r{\\left(x,y \\right)}\\right) \\tan{\\left(\\alpha \\right)}$"
      ],
      "text/plain": [
       "m*n_t*asin(y/r(x, y))/2 + t + (-xw + r(x, y))*tan(alpha)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z = m * n_t * sym.asin(y / r) / 2 + (r - xw) * sym.tan(alpha) + t\n",
    "z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b27511ac-5d0a-4a18-848b-7f026d5e4268",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{m n_{t} y \\frac{\\partial}{\\partial x} r{\\left(x,y \\right)}}{2 \\sqrt{- \\frac{y^{2}}{r^{2}{\\left(x,y \\right)}} + 1} r^{2}{\\left(x,y \\right)}} + \\tan{\\left(\\alpha \\right)} \\frac{\\partial}{\\partial x} r{\\left(x,y \\right)}$"
      ],
      "text/plain": [
       "-m*n_t*y*Derivative(r(x, y), x)/(2*sqrt(-y**2/r(x, y)**2 + 1)*r(x, y)**2) + tan(alpha)*Derivative(r(x, y), x)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.simplify(sym.diff(z, x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "de2be944-6b75-41d5-86ba-fd896fe7ffda",
   "metadata": {},
   "outputs": [],
   "source": [
    "np.tan(alpha)*dr_dx(x,y) - module * n_t * y * d_r(x, y) / 2 / np.sqrt(1 - y**2/r(x, y)**2) / r(x, y)**2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "614329e0-8a9a-4ba3-83bd-6f36a6ebb8ff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{x^{2} + y^{2}}$"
      ],
      "text/plain": [
       "sqrt(x**2 + y**2)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r = sym.sqrt(x**2 + y**2)\n",
    "r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "654802b1-ef8f-4a55-b434-fa96c4daabba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x}{\\sqrt{x^{2} + y^{2}}}$"
      ],
      "text/plain": [
       "x/sqrt(x**2 + y**2)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.diff(r, x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f07e684-1a54-4cfb-bc8c-6d73964a743a",
   "metadata": {},
   "outputs": [],
   "source": [
    "x / r(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "05428eb2-d03e-41e8-9ffd-5263b1db6344",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PATH_TO_FREECAD_LIBDIR not specified, using default FreeCAD version in /Users/lo/projects/freecad/freecad.gears/.pixi/envs/default/lib\n",
      "t_start_1: -3.111447653720825\n",
      "t_start_0: 3.8893095671510314\n",
      "t0: 3.918003320200202, min: 0.36578136487102625\n",
      "t1: -3.198847303563012, min: 0.36578136487102625\n",
      "t0_start: -3.111447653720825, min: 0.010941793281827223\n",
      "t1_start: 3.8893095671510314, min: -0.0030845690948233754\n",
      "t0: 3.269498646278975, min: 0.44186895876036775\n",
      "t1: -3.642880473656599, min: 0.44186895876036775\n",
      "t0_start: -3.111447653720825, min: 0.06633302892696695\n",
      "t1_start: 3.8893095671510314, min: 0.06569276335972905\n",
      "t0: 3.111447653720826, min: 0.45461035737330546\n",
      "t1: -3.889309567151029, min: 0.45461035737330546\n",
      "t0_start: -3.111447653720825, min: 0.09643386212545335\n",
      "t1_start: 3.8893095671510314, min: 0.07726137411494792\n",
      "t0: 3.4753294082942467, min: 0.391587937911889\n",
      "t1: -3.9404682933633146, min: 0.391587937911889\n",
      "t0_start: -3.111447653720825, min: 0.1018769815432526\n",
      "t1_start: 3.8893095671510314, min: 0.036638548212909475\n",
      "t0: 4.618407389340066, min: 0.27937712925515973\n",
      "t1: -3.7704795707871717, min: 0.27937712925515973\n",
      "t0_start: -3.111447653720825, min: 0.08005060905003618\n",
      "t1_start: 3.8893095671510314, min: -0.0538233105959429\n"
     ]
    },
    {
     "data": {
      "image/png": "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iYuLIyEhgaeeegqACy64wMvRdY1fT421Wq0ApKSk9Ii/SMvLyxk3bhzx8fE8/fTT1NTU7P1eZGSkFyPrPLfddhvTp08nOzt7b0tTcXHxCTvOZ3833HADH374IV999RV+fn57W6ACAgIwm81ejq7z+fn5HTS+x9fXl5CQkB4z7ufWW29l5MiRPPbYY1x44YWsWrWK11577YRucf21M888k0cffZT4+HiysrJYv349//nPf7jqqqs65w07ZQ5TD+dwOJS///3vSnh4uOLn56dMnDhR2bJli7fD8pqCgoIeNVX6rbfeUoBDHieyF198UUlISFCMRqMyaNCgHjNV+HD/1m+99Za3Q/OanjZVWlEU5ZtvvlH69OmjmEwmJTMzU3nttde8HVKXstlsys0336zEx8crPj4+SnJysnL33Xcrdru9U95PoyiK0jlpkRBCCCHEn+/E7YgXQgghxAlJkhchhBBCdCuSvAghhBCiW5HkRQghhBDdiiQvQgghhOhWJHkRQgghRLciyYsQQgghuhVJXoQQQgjRrUjyIoQQQohuRZIXIYQQQnQrkrwIIYQQoluR5EUIIYQQ3cr/AxNbfS3qlJxxAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scipy as sp\n",
    "import numpy as np\n",
    "from freecad import part\n",
    "from freecad import app\n",
    "from pygears.transformation import numeric_transformation\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "debug = False\n",
    "def compute_involute(module=1, teeth=15, height=3, worm_pitch_diameter=10, num_threads=1, alpha=np.deg2rad(20), clearence=0.25, head=0.):\n",
    "    y = 0.\n",
    "    xw = worm_pitch_diameter / 2\n",
    "    \n",
    "    def r(x, y):\n",
    "        return (x**2 + y**2)**(0.5)\n",
    "\n",
    "    def dr_dx(x, y):\n",
    "        return x / r(x, y)\n",
    "    \n",
    "    def z(x, y, t):\n",
    "        r_xy = r(x, y)\n",
    "        return module * num_threads * np.arcsin(y / r_xy) / 2 + (r_xy - xw) * np.tan(alpha) + t\n",
    "\n",
    "    def dz_dx(x, y, t):\n",
    "        r_xy = r(x, y)\n",
    "        return np.tan(alpha) * dr_dx(x,y) - module * num_threads * y * dr_dx(x, y) / 2 / np.sqrt(1 - y**2/r_xy**2) / r_xy**2\n",
    "\n",
    "    def distance_pw(x, y, t):\n",
    "        return np.sqrt((xw - x) ** 2 + z(x, y, t) ** 2)\n",
    "\n",
    "    def d_distance_pw_dx(x, y, t):\n",
    "        return (x - xw + z(x,y,t) * dz_dx(x,y,t)) / np.sqrt((x-xw) ** 2 + z(x,y,t) ** 2)\n",
    "\n",
    "    def min_root(y, t):\n",
    "        r0 = xw +  module * (1 + clearence)\n",
    "        x0 = np.sqrt(r0**2 - y**2)\n",
    "        return d_distance_pw_dx(x0, y, t)\n",
    "        \n",
    "    def min_head(y, t):\n",
    "        r1 = xw -  module * (1 + head)\n",
    "        x1 = np.sqrt(r1**2 - y**2)\n",
    "        return d_distance_pw_dx(x1, y, t)\n",
    "        \n",
    "    xyz = []        \n",
    "    r0 = xw -  module * (1 + head)\n",
    "    r1 = xw +  module * (1 + clearence)\n",
    "    t_start_0 = (r0 - xw) * (np.tan(alpha) + 1. / np.tan(alpha))\n",
    "    t_start_1 = (r1 - xw) * (np.tan(alpha) + 1. / np.tan(alpha))\n",
    "    print(f\"t_start_1: {t_start_0}\")\n",
    "    print(f\"t_start_0: {t_start_1}\")\n",
    "\n",
    "    for y in np.linspace(- height / 2, height / 2, 5):\n",
    "        t_i = np.linspace(t_start_0 * 2, t_start_1 * 2, 100)\n",
    "        plt.plot(t_i, [min_root(y, t) for t in t_i])\n",
    "        plt.plot(t_i, [min_head(y, t) for t in t_i])\n",
    "        plt.grid()\n",
    "        t0 = sp.optimize.root(lambda t: min_head(y, t)**2, t_start_1).x[0]\n",
    "        t1 = sp.optimize.root(lambda t: min_root(y, t)**2, t_start_0).x[0]\n",
    "        print(f\"t0: {t0}, min: {min_root(y, t0)**2}\")\n",
    "        print(f\"t1: {t1}, min: {min_root(y, t0)**2}\")        \n",
    "        print(f\"t0_start: {t_start_0}, min: {min_root(y, t_start_0)}\")\n",
    "        print(f\"t1_start: {t_start_1}, min: {min_head(y, t_start_1)}\")\n",
    "        for t in np.linspace(t0, t1, 10):\n",
    "            x_t = sp.optimize.root(lambda x: d_distance_pw_dx(x, y, t), xw).x[0]\n",
    "            z_t = z(x_t, y, t)\n",
    "            point = App.Vector(x_t, y, z_t)\n",
    "            part.show(part.Point(point).toShape())\n",
    "\n",
    "compute_involute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "08796217-5c32-4970-9c2e-486855bfe01a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-2.7328221219692046 3.4258549033764787 3.111447653720825\n",
      "-2.7297767569965177 2.6754565048922134 3.111447653720825\n",
      "-2.703747361749271 3.750915476594737 3.111447653720825\n"
     ]
    }
   ],
   "source": [
    "import scipy as sp\n",
    "import numpy as np\n",
    "from freecad import part\n",
    "from freecad import app\n",
    "from pygears.transformation import numeric_transformation\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "debug = False\n",
    "def compute_involute(module=1, teeth=15, height=3, worm_pitch_diameter=10, num_threads=1, alpha=np.deg2rad(20), clearence=0.25, head=0.):\n",
    "    y = 0.\n",
    "    xw = worm_pitch_diameter / 2\n",
    "    rw = module * teeth / 2.  # the pitch radius of the gear (not the worm!)\n",
    "    \n",
    "    def r(x, y):\n",
    "        return (x**2 + y**2)**(0.5)\n",
    "\n",
    "    def dr_dx(x, y):\n",
    "        return x / r(x, y)\n",
    "    \n",
    "    def z(x, y, t):\n",
    "        r_xy = r(x, y)\n",
    "        return module * num_threads * np.arcsin(y / r_xy) / 2 + (r_xy - xw) * np.tan(alpha) + t\n",
    "\n",
    "    def dz_dx(x, y, t):\n",
    "        r_xy = r(x, y)\n",
    "        return np.tan(alpha) * dr_dx(x,y) - module * num_threads * y * dr_dx(x, y) / 2 / np.sqrt(1 - y**2/r_xy**2) / r_xy**2\n",
    "\n",
    "    def distance_pw(x, y, t):\n",
    "        return np.sqrt((xw - x) ** 2 + z(x, y, t) ** 2)\n",
    "\n",
    "    def d_distance_pw_dx(x, y, t):\n",
    "        return (x - xw + z(x,y,t) * dz_dx(x,y,t)) / np.sqrt((x-xw) ** 2 + z(x,y,t) ** 2)\n",
    "\n",
    "    def min_root(y, t):\n",
    "        r0 = xw +  module * (1 + clearence)\n",
    "        x0 = np.sqrt(r0**2 - y**2)\n",
    "        return d_distance_pw_dx(x0, y, t)\n",
    "\n",
    "    def min_ground(y, t):\n",
    "        r1 = xw + rw / 2\n",
    "        xt = sp.optimize.root(lambda xt: xt + np.sqrt(rw**2 / 4 - z(xt, y, t) ** 2) - r1, xw).x[0]\n",
    "        return d_distance_pw_dx(xt, y, t)\n",
    "        \n",
    "    def min_head(y, t):\n",
    "        r1 = xw -  module * (1 + head)\n",
    "        x1 = np.sqrt(r1**2 - y**2)\n",
    "        return d_distance_pw_dx(x1, y, t)\n",
    "\n",
    "    def min_head_1(y, t):\n",
    "        r1 = xw - module * (1 + head)\n",
    "        x1 = np.sqrt(r1**2 - y**2)\n",
    "        r2 = xw + rw - x1\n",
    "        # rw + xw - xt = np.sqrt(r2**2 - z(xt, y, t))  # x2 is function of x2!!!\n",
    "        xt = sp.optimize.root(lambda xt: xt - rw - xw + np.sqrt(r2**2 - z(xt, y, t)), x1).x[0]\n",
    "        return d_distance_pw_dx(xt, y, t)\n",
    "\n",
    "    def create_points(): \n",
    "        xyz = []\n",
    "        t_start_0 = -rw * np.tan(alpha)\n",
    "        t_start_1 = module * (1 + head) * (np.tan(alpha) + 1. / np.tan(alpha))\n",
    "        for y in np.linspace(- height / 2, height / 2, 3):\n",
    "            t0 = sp.optimize.root(lambda t: min_ground(y, t)**2, t_start_0).x[0]\n",
    "            t1 = sp.optimize.root(lambda t: min_head_1(y, t)**2, t_start_1).x[0]\n",
    "            print(t0, t1, t_start_1)\n",
    "            xyz_section = []\n",
    "            for t in np.linspace(t0, t1, 10):\n",
    "                # phi = np.pi / 2\n",
    "                # phi = x_p * np.tan(alpha) / r_w\n",
    "                # phi += - np.sign(alpha) * module * np.pi / 4. / r_w\n",
    "                phi = t / rw\n",
    "                T_0 = numeric_transformation(0, np.array([1., 0., 0.]), np.array([-rw - xw, 0, 0]))\n",
    "                T_1 = numeric_transformation(phi, np.array([0., 1., 0.]))\n",
    "                T_2 = numeric_transformation(np.pi/2, np.array([1., 0., 0.]))\n",
    "                T = T_2 @ T_1 @ T_0\n",
    "    \n",
    "                x_t = sp.optimize.minimize(lambda x: distance_pw(x, y, t), xw).x[0]\n",
    "                z_t = z(x_t, y, t)\n",
    "                # point = app.Vector(x_t, y, z_t)\n",
    "                # part.show(part.Point(point).toShape())\n",
    "                point = T @ np.array([x_t, y, z_t, 1])\n",
    "                xyz_section.append(app.Vector(*point[0:3]))\n",
    "            xyz.append(xyz_section)\n",
    "\n",
    "        curves = []\n",
    "        for line in xyz:\n",
    "            bs = part.BSplineCurve()\n",
    "            bs.interpolate(line)\n",
    "            curves.append(bs)\n",
    "        part.show(part.makeLoft(curves))\n",
    "        \n",
    "    create_points()\n",
    "compute_involute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1f121e14-eead-4caf-92bd-7d45c9be3451",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
